前回のエントリーでSVMにはベクトルを入力すると言いました。また、学習のためには、そのベクトルがそのジャンルに含まれるか含まれないか、という目印も必要です。
これまでジャンル、という曖昧な言葉を使っていましたが、今後は、そのような事を表す言葉で、機械学習でよく使われる用語である「クラス」、という言葉を使おうと思います。
つまり、クラスとベクトルの2つの情報を使って学習させるということです。
以下は、TinySVMの訓練データのフォーマットです。TinySVMのページから、入力データに関する部分を以下に引用します。
1 2 3 4 5 6 7 8 9 10 11 12 |
(BNF-like representation) <class> .=. +1 | -1 <feature> .=. integer (>=1) <value> .=. real <line> .=. <class> <feature>:<value><feature>:<value> ... <feature>:<value> Example (SVM) +1 201:1.2 3148:1.8 3983:1 4882:1 -1 874:0.3 3652:1.1 3963:1 6179:1 +1 1168:1.2 3318:1.2 3938:1.8 4481:1 +1 350:1 3082:1.5 3965:1 6122:0.2 -1 99:1 3057:1 3957:1 5838:0.3 |
1行が1つのデータに相当し、行頭に+1か-1、その後に整数と実数をコロンでつないだものが連なっています。行頭の+1か-1がクラスに属すかどうか(+1なら属す、-1なら属さない)を示し、その後のデータがベクトルを表現しています。
コロンの前がベクトルの添字、コロンの後がそのベクトルの添字で示される要素の値を示します。添字がなければ、その要素は0となります。
クラスに属すか属さないかを、ベクトルの要素を使って識別するのですが、これらの要素のことを「素性」と呼びます。なお、すじょう、ではなく、「そせい」と読みます。
SVMに与える情報として、どのような素性が役に立ちそうか、どの素性を用いればより正確に分類ができるかは、解こうとする問題にもよるため、この素性が良い、というのは一概には言えませんし、ある種職人芸的な部分でもあります。
とりあえず入力データについては分かったので、次は評価について書いてみたいと思います。